package com.airobot.robot.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class Config {

    /**
     * 方式一：使用 CorsFilter（推荐）
     * 这种方式更灵活，可以处理所有类型的请求
     */
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();

        // 设置允许访问的前端地址，这里设置你的Vue前端地址
        config.addAllowedOrigin("http://localhost:5173"); // Vite默认前端地址
        // 如果需要多个地址，可以这样添加：
        // config.addAllowedOrigin("http://localhost:8081");

        // 设置是否发送cookie信息
        config.setAllowCredentials(true);

        // 设置允许的请求方法
        config.addAllowedMethod("GET");
        config.addAllowedMethod("POST");
        config.addAllowedMethod("PUT");
        config.addAllowedMethod("DELETE");
        config.addAllowedMethod("OPTIONS"); // 预检请求必须要有
        // 或者使用通配符允许所有方法：
        // config.addAllowedMethod("*");

        // 设置允许的请求头
        config.addAllowedHeader("*");

        // 设置暴露的响应头（如果需要前端获取某些自定义头信息）
        config.addExposedHeader("Authorization");
        config.addExposedHeader("Content-Disposition");

        // 配置源对象
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config); // 对所有接口生效

        return new CorsFilter(source);
    }

    /**
     * 方式二：使用 WebMvcConfigurer（备用方案）
     * 这种方式更简单，但功能相对较少
     */
//    @Bean
//    public WebMvcConfigurer corsConfigurer() {
//        return new WebMvcConfigurer() {
//            @Override
//            public void addCorsMappings(CorsRegistry registry) {
//                registry.addMapping("/**") // 所有接口
//                        .allowedOrigins("http://localhost:5173") // 允许的前端地址
//                        .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
//                        .allowedHeaders("*")
//                        .allowCredentials(true)
//                        .maxAge(3600); // 预检请求的缓存时间（秒）
//            }
//        };
//    }
}